
cmake_minimum_required(VERSION 3.0)
project(FILE)

#-----------------------------------------------------------------------------------------------------------------------
# ********************本节重点学习*******************
# 1.file(GLOB <变量> <源文件>)搜索的用法
# 2.message(STATUS <print内容>)打印日志
# 3.include_directories(<路径>)引入文件路径的用法
# 3.lsit()的用法
# *************************************************
#-----------------------------------------------------------------------------------------------------------------------
# 搜索添加在当前路径下的所有源文件
# PROJECT_SOURCE_DIR 和 CMAKE_SOURCE_DIR是一样的。
file(GLOB SRC
        ${CMAKE_SOURCE_DIR}/*.cpp
        ${CMAKE_SOURCE_DIR}/include/*.h
        #表示当前路径在退一级目录
#        ${CMAKE_SOURCE_DIR}/../include/*.h
)

#-----------------------------------------------------------------------------------------------------------------------
# 长度计算 list(LENGTH <list> <定义变量接收>)
list(LENGTH SRC lsit_len1)
# message打印日志，STATUS固定用法
message(STATUS 列表1的长度为:${lsit_len1})
message(STATUS 添加的源文件有:${SRC})

#-----------------------------------------------------------------------------------------------------------------------
# list(REMOVE_ITEM <list> <不需要的源文件>)
list(REMOVE_ITEM SRC ${PROJECT_SOURCE_DIR}/no_use_file.cpp)
# 长度计算 list(LENGTH <list> <定义变量接收>)
list(LENGTH SRC lsit_len2)
# message打印日志，STATUS固定用法
message(STATUS 列表2的长度为:${lsit_len2})
message(STATUS 添加的源文件有:${SRC})

#-----------------------------------------------------------------------------------------------------------------------


# 我们的头文件跟cpp文件不再一级，导致#include "head.h"找不到，因此我们需要包含头文件路径。
# include_directories添加路径
include_directories(${PROJECT_SOURCE_DIR}/include)

#-----------------------------------------------------------------------------------------------------------------------
#指定可执行文件输出路径，如果不添加就会默认输出到当前路径
set(EXECUTABLE_OUTPUT_PATH /home/gabriel/mac_disk/cpp_project/cmake/demo_v3/build)
#-----------------------------------------------------------------------------------------------------------------------
#生成可执行文件
add_executable(app_demo3 ${SRC})
#-----------------------------------------------------------------------------------------------------------------------


# 更多学习：
# 1.file的其他操作：https://zhuanlan.zhihu.com/p/645350929
# 2.list的其他操作：https://blog.csdn.net/sinat_31608641/article/details/123101692
    # (1) LENGTH　　　　   　　　　 返回list的长度
    # (2) GET　　　　　　    　　　　返回list中index的element到value中
    # (3) APPEND　　　　    　　　　添加新element到list中
    # (4) FIND　　　　　　   　　　　返回list中element的index，没有找到返回-1
    # (5) INSERT 　　　　　　　　　 将新element插入到list中index的位置
    # (6) REMOVE_ITEM　　　　　　从list中删除某个element
    # (7) REMOVE_AT　　　　　　　从list中删除指定index的element
    # (8) REMOVE_DUPLICATES       从list中删除重复的element
    # (9) REVERSE 　　　　　　　　将list的内容反转
    # (10) SORT 　　　　　　　　　　将list按字母顺序排序
# 3.message其他操作：https://blog.csdn.net/maizousidemao/article/details/104098433?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-104098433-blog-127823890.235%5Ev43%5Epc_blog_bottom_relevance_base1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-104098433-blog-127823890.235%5Ev43%5Epc_blog_bottom_relevance_base1&utm_relevant_index=6
    # (1) ATAL_ERROR： CMake Error，处理方式：停止编译和生成。
    # (2) SEND_ERROR： CMake Error，处理方式：继续编译但会跳过生成。
    # (3) WARNING： CMake Warning，处理方式：继续编译和生成。
    # (4) AUTHOR_WARNING： CMake Warning，处理方式：继续编译和生成。
    # (5) DEPRECATION： CMake Deprecation Warning，用以告警旧的方法不被支持，使用 CMAKE_WARN_DEPRECATED 使能该告警打印：
    # (6) NOTICE： 打印重要信息。
    # (7) STATUS： 用户可能感兴趣的简介信息。
    # (8) VERBOSE： 为用户提供的构建的详细信息。
    # (9) DEBUG： 为开发人员提供的构建的详细信息。
    # (10)TRACE： 更底层的构建的详细信息。

